# -*- coding: utf-8 -*-
'''
    __str__  如果定义了该函数，当print当前实例化对象的时候，会返回该函数的return信息
    def __str__(self):
        return str_type
    __getattr__ 当调用属性或者方法不存在时，会返回该方法定义的信息
    def __getattr__(self,key):
        print(someing)
    参数
        key 调用任意不存在的属性名
    __setattr__  拦截当前类中不存在的属性与值
    def __settattr__(self,key,value):
        self.__dict__[key] = value
    参数
        key 当前的属性名
        value 当前的参数对应的值
    __call__

'''

class Test(object):
    def __str__(self):
        return '这是关于这个类的描述'

test = Test()
print(test) # 这是关于这个类的描述


class Test2(object):
    def __getattr__(self, key):
        print('这个key{}不存在'.format(key))

test = Test2()
print(test.a) # 这个keya不存在 None